export default {

    /**
     * 格式化时间
     * @param date
     * @param fmt
     * @returns {*}
     * @private
     */
    _dateFormat(date,fmt) {
        var o = {
            "M+" : date.getMonth()+1,                 //月份
            "d+" : date.getDate(),                    //日
            "h+" : date.getHours(),                   //小时
            "m+" : date.getMinutes(),                 //分
            "s+" : date.getSeconds(),                 //秒
            "q+" : Math.floor((date.getMonth()+3)/3), //季度
            "S"  : date.getMilliseconds()             //毫秒
        };

        if(/(y+)/.test(fmt)){
            fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
        }

        for(var k in o){
            if(new RegExp("("+ k +")").test(fmt)){
                fmt = fmt.replace(
                    RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
            }
        }

        return fmt;
    },


    // 日期格式化
    parseTime(time, pattern) {
        if (arguments.length === 0 || !time) {
            return null
        }
        const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
        let date
        if (typeof time === 'object') {
            date = time
        } else {
            if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
                time = parseInt(time)
            } else if (typeof time === 'string') {
                time = time.replace(new RegExp(/-/gm), '/');
            }
            if ((typeof time === 'number') && (time.toString().length === 10)) {
                time = time * 1000
            }
            date = new Date(time)
        }
        const formatObj = {
            y: date.getFullYear(),
            m: date.getMonth() + 1,
            d: date.getDate(),
            h: date.getHours(),
            i: date.getMinutes(),
            s: date.getSeconds(),
            a: date.getDay()
        }
        const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
            let value = formatObj[key]
            // Note: getDay() returns 0 on Sunday
            if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
            if (result.length > 0 && value < 10) {
                value = '0' + value
            }
            return value || 0
        })
        return time_str
    },

    // 表单重置
    resetForm(refName) {
        Object.keys(refName).forEach(key => (refName[key] = ''));
    },

    // 添加日期范围
    addDateRange(params, dateRange) {
        var search = params;
        search.beginTime = "";
        search.endTime = "";
        if (null != dateRange && '' != dateRange) {
            search.beginTime = dateRange[0];
            search.endTime = dateRange[1];
        }
        return search;
    },

    // 回显数据字典
    selectDictLabel(datas, value) {
        var actions = [];
        Object.keys(datas).some((key) => {
            if (datas[key].code == ('' + value)) {
                actions.push(datas[key].value);
                return true;
            }
        })
        return actions.join('');
    },

    // 回显数据字典（字符串数组）
    selectDictLabels(datas, value, separator) {
        var actions = [];
        var currentSeparator = undefined === separator ? "," : separator;
        var temp = value.split(currentSeparator);
        Object.keys(value.split(currentSeparator)).some((val) => {
            Object.keys(datas).some((key) => {
                if (datas[key].dictValue == ('' + temp[val])) {
                    actions.push(datas[key].dictLabel + currentSeparator);
                }
            })
        })
        return actions.join('').substring(0, actions.join('').length - 1);
    },

    // 通用下载方法
    download(fileName) {
        window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
    },

    // 字符串格式化(%s )
    sprintf(str) {
        var args = arguments, flag = true, i = 1;
        str = str.replace(/%s/g, function () {
            var arg = args[i++];
            if (typeof arg === 'undefined') {
                flag = false;
                return '';
            }
            return arg;
        });
        return flag ? str : '';
    },

    // 转换字符串，undefined,null等转化为""
    praseStrEmpty(str) {
        if (!str || str == "undefined" || str == "null") {
            return "";
        }
        return str;
    },

    /**
     * 构造树型结构数据
     * @param {*} data 数据源
     * @param {*} id id字段 默认 'id'
     * @param {*} parentId 父节点字段 默认 'parentId'
     * @param {*} children 孩子节点字段 默认 'children'
     * @param {*} rootId 根Id 默认 0
     */
    handleTree(data, id, parentId, children, rootId) {
    console.log(id)
        id = id || 'id'
        parentId = parentId || 'parentId'
        children = children || 'children'
        rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 0
        //对源数据深度克隆
        const cloneData = JSON.parse(JSON.stringify(data))
        //循环所有项
        const treeData = cloneData.filter(father => {
            let branchArr = cloneData.filter(child => {
                //返回每一项的子级数组
                return father[id] === child[parentId]
            });
            branchArr.length > 0 ? father.children = branchArr : '';
            //返回第一层
            return father[parentId] === rootId;
        });
        return treeData != '' ? treeData : data;
    },
}
